package cn.uniqueinfo.dp.aspect;

import cn.uniqueinfo.dp.exception.UQException;
import cn.uniqueinfo.dp.vo.Result;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

/**
 * @author:朱元勋
 * @mail:395910063@qq.com
 * @date:2019-01-04 14:48:15
 * @description:全局控制器辅助处理，如异常处理
 */
@ControllerAdvice
public class GlobalControllerAspect {

    /** 应用到所有@RequestMapping注解方法，在其执行之前初始化数据绑定器 */
    @InitBinder
    public void initBinder(WebDataBinder binder) {}

    /** 把值绑定到Model中，使全局@RequestMapping可以获取到该值 */
    @ModelAttribute
    public void addAttributes(Model model) {
        // model.addAttribute("title", "测试");
    }

    /** 自定义异常处理 */
    @ResponseBody
    @ExceptionHandler(value = UQException.class)
    public Result uqExceptionHandler(UQException ex) {
        ex.printStackTrace();
        return new Result(ex.getCode(), ex.getName() + ex.getMsg(), ex.getMsg() + ex.getStack());
    }

    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Result uqExceptionHandler(Exception ex) {
        ex.printStackTrace();
        return new Result(0, ex.getMessage(), null);
    }
}
